Data storage systems are arrangements of hardware and software that include storage processors coupled to arrays of non-volatile storage devices, such as magnetic disk drives, electronic flash drives, and/or optical drives, for example. The storage processors service storage requests, arriving from host machines (“hosts”), which specify files or other data elements to be written, read, created, deleted, and so forth. Software running on the storage processors manages incoming storage requests and performs various data processing tasks to organize and secure the data elements stored on the non-volatile storage devices.
Data storage systems commonly arrange non-volatile storage according to RAID protocols. As is known, “RAID” is an acronym for Redundant Array of Independent (or sometimes Inexpensive) Disks. For example, a data storage system may render storage regions of a disk drive as multiple RAID elements, which the data storage system combines with RAID elements from other disk drives to form RAID stripes. Each RAID stripe may store data redundantly, e.g., by designating one or more elements for storing data and one or more elements for storing mirrored data or parity. In the event of damage to a RAID element of a RAID stripe, RAID protocols act to repair the stripe by rebuilding the data formerly stored in the failed element onto a new element, which may have been provided as a spare. If redundancy is achieved using mirroring, rebuilding may involve copying data from another element onto the new element. If redundancy is achieved using parity, rebuilding may involve computing data for the new element, e.g., as a bitwise exclusive-OR of corresponding regions from other elements in the stripe, and writing the results to the new element.